(function() {
	App.injury.Component.System.Menu = function(config) {
		var me = this;

		var sm = new Ext.grid.CheckboxSelectionModel();

		App.injury.Component.System.Menu.superclass.constructor.call(this, Ext
				.apply({
					border : false,
					layout : 'border',
					items : [ {
						region : 'west',
						width : 160,
						minWidth : 100,
						rightBorder : true,
						border : false,
						iconCls : 'systemMenu',
						xtype : 'fwtree',
						title : '系统菜单',
						root : {
							text : '系统菜单',
							id:'0',
							expanded : true,
							_singleClickExpand : true
						},
						autoScroll : true,
						split : true,
						collapsible : true,
						loader : {
							url : 'system/menu!getMenuTreeNodes.action'
						},
						listeners :{
							click : function(node){
								var menuGrid = me.getComponent(1);
								if(node.id == '0'){
									menuGrid.getStore().load();
								}else{
									menuGrid.getStore().load({
										params:{
											'entity.parent.id' : node.id
										}
									});
								}
								
							}
						}

					}, {
						region : 'center',
						xtype : 'fwgrid',
						sm : sm,
						tbar : [ {
							text : '新增',
							iconCls : 'add',
							handler : function() {
								
								var treePanel = me.getComponent(0);
								var selNode = treePanel.getSelectionModel().getSelectedNode();
								if(!selNode){
									selNode = treePanel.getRootNode();
								}
								me.getWindow({
									title:'新增菜单',
									actionType : 'ADD',
									fieldValues:{
										parentMenuName : selNode.text,
									    'entity.parent.id' : selNode.id
										
									}
								}).show();
							}
						}, {
							text : '修改',
							iconCls : 'update',
							handler : function() {
								var menuGrid = me.getComponent(1);
								var sm = menuGrid.getSelectionModel();
								var records = sm.getSelections();
								if(records.length == 0){
									Ext.Msg.show({
										title : '系统提示',
										msg : '请选择要修改的菜单项.',
										buttons : Ext.MessageBox.OK,
										icon : Ext.MessageBox.INFO
									});
									return false;
								}
								var fieldValues = {},json = records[0].json;
								for(var v in json){
									fieldValues['entity.'+v] = json[v];
								}
								fieldValues['entity.parent.id'] = json.parentMenuId;
								fieldValues['parentMenuName'] = 
										json.parentMenuName ? json.parentMenuName : '系统菜单';
								me.getWindow({
									title:'修改菜单',
									actionType : 'UPDATE',
									fieldValues:fieldValues
								}).show();
							}
						}, {
							text : '删除',
							iconCls : 'delete',
							handler : function() {
								var menuGrid = me.getComponent(1);
								var sm = menuGrid.getSelectionModel();
								var records = sm.getSelections();
								if(records.length === 0){
									Ext.Msg.show({
										title : '系统提示',
										msg : '请选择要删除的菜单项.',
										buttons : Ext.MessageBox.OK,
										icon : Ext.MessageBox.INFO
									});
									return false;
								}
								var idArr = [];
								for(var i = 0 ;i<records.length; i++){
									idArr.push(records[i].id);
								}
								Ext.Msg.confirm('系统提示','确定删除选中的菜单?',
									function(btn) {
										if (btn == 'ok' || btn == 'yes') {
											Ext.Ajax.request({
														url : 'system/menu!deleteMenu.action',
														method : 'POST',
														params : {'entity.id' : idArr.join(',')},
														success : function(response,opts) {
															menuGrid.getStore().reload();
															var menuTree = me.getComponent(0);
															menuTree.getRootNode().reload();
															menuTree.expandAll();
														},
														failure : function() {}
													});
										}
								});
							
							}
						} ],
						cm : new Ext.grid.ColumnModel([ sm, {
							header : '菜单名称',
							dataIndex : 'menuName',
							width : 200,
							sortable : true
						}, {
							header : '组件类名',
							dataIndex : 'componentName',
							width : 220,
							sortable : true
						}, {
							header : '序号',
							dataIndex : 'order',
							width : 100,
							sortable : true
						}, {
							header : '图标样式',
							dataIndex : 'iconCls',
							width : 120,
							sortable : true
						}, {
							header : '图标路径',
							dataIndex : 'icon',
							width : 150,
							sortable : true
						}, {
							header : 'URL',
							dataIndex : 'url',
							width : 150,
							sortable : true
						} ]),
						store : new Ext.data.Store({
							proxy : new Ext.data.HttpProxy({
								url : 'system/menu!getMenusByParent.action'
							}),
							reader : new Ext.data.JsonReader({}, [ {
								name : "menuName",
							}, {
								name : "iconCls"
							}, {
								name : "order"
							}, {
								name : "url"
							}, {
								name : "componentName"
							}, {
								name : "icon"
							} ])
						})

					} ]
				}, config || {}));
	};
	Ext.extend(App.injury.Component.System.Menu, App.injury.Component.FWPanel,
			{
				getWindow : function(config) {
					var me = this;
					return new App.injury.Component.FWWindow({
						height : 255,
						width : 300,
						title : config.title,
						autoScroll : false,
						layout : 'fit',
						tbar : [ {
							text : '保存',
							iconCls:'save',
							handler : function() {
									var _window = this.ownerCt.ownerCt;
									var form = _window.getComponent(0).getForm();
									var url = null;
									if(config.actionType === 'ADD'){
										url = 'system/menu!addMenu.action';
									}else{
										url = 'system/menu!updateMenu.action';
									}
									form.submit({
										method : 'post',
										url: url,
										success:function(){
											_window.close();
											me.getComponent(1).getStore().reload();
											var menuTree = me.getComponent(0);
											menuTree.getRootNode().reload();
											menuTree.expandAll();
										}
									});
							}
						}, {
							text : '退出',
							iconCls:'exit',
							handler : function() {
								this.ownerCt.ownerCt.close();
							}
						} ],
						items : {
							xtype : 'fwform',
							autoScroll : false,
							listeners : {
								render : function(){
									this.getForm().setValues(config.fieldValues);
								}
							},
							items : [ {
								name : 'entity.id',
								xtype : 'hidden'
							}, {
								name : 'entity.parent.id',
								xtype : 'hidden'
							}, {
								allowBlank : false,
								xtype : 'textfield',
								anchor : '90%',
								readOnly : true,
								name : 'parentMenuName',
								fieldLabel : '父菜单名称'
							}, {
								allowBlank : false,
								xtype : 'textfield',
								anchor : '90%',
								name : 'entity.menuName',
								fieldLabel : '菜单名称'
							}, {
								xtype : 'textfield',
								anchor : '90%',
								name : 'entity.componentName',
								fieldLabel : '组件类名'
							}, {
								xtype : 'textfield',
								anchor : '90%',
								name : 'entity.iconCls',
								fieldLabel : '图标样式'
							}, {
								xtype : 'textfield',
								anchor : '90%',
								name : 'entity.icon',
								fieldLabel : '图标路径'
							}, {
								xtype : 'textfield',
								anchor : '90%',
								name : 'entity.url',
								fieldLabel : 'URL'
							}, {
								xtype : 'numberfield',
								allowBlank : false,
								anchor : '45%',
								minValue : 1,
								maxValue : 100,
								name : 'entity.order',
								fieldLabel : '序号'
							} ]
						}

					});
				}
			});

})();